/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pacotecaixa;

import br.com.interfaces.IGerente;
import br.com.pacoteprincipal.Bens;
import br.com.pacoteprincipal.Conta;
import br.com.pacoteprincipal.GeradoresDeRenda;
import br.com.pacotesecundario.Ativos;
import br.com.pacotesecundario.Cartoes;
import br.com.pacotesecundario.ContasAPagar;
import br.com.pacotesecundario.ContasAReceber;
import br.com.pacotesecundario.ContasBancarias;
import br.com.pacotesecundario.Pacivos;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *claase gerente
 *  responsavel por definir todos os métodos do programa
 * @author Felipe
 */
public class Gerente implements IGerente {
    Scanner ler=new Scanner(System.in);
    List<Conta> contas=new ArrayList();
    List<ContasBancarias> banco=new ArrayList();
    List<Cartoes> cartao=new ArrayList();
    List<Bens> bens=new ArrayList();
    List<GeradoresDeRenda> gerador=new ArrayList();
    
    int op;
   
    
    @Override
    public ContasAPagar criarContaPagar(){
        int cont=1;
    
      if(contas.size()>0){
          
      for(int i=0;i<contas.size();i++){
          if(contas.get(i) instanceof ContasAPagar){
              cont++;
          }
        }
      }
      
     
        System.out.println(" ");
        System.out.println(" Referencia da conta");
        ler.nextLine();
        String referencia=ler.nextLine();
        System.out.println(" valor da divida");
        double valor=ler.nextDouble();
        
          ContasAPagar novo=new ContasAPagar(referencia,cont,valor);
          return novo;
    } 
    
    
    @Override
    public ContasAReceber criarContaReceber(){
         int cont=1;
    
      if(contas.size()>0){
          
      for(int i=0;i<contas.size();i++){
          if(contas.get(i) instanceof ContasAReceber){
              cont++;
          }
        }
      }
        System.out.println(" ");
        System.out.println(" Referencia da conta");
        ler.nextLine();
        String referencia=ler.nextLine();
        System.out.println(" valor da conta");
        double valor=ler.nextDouble();
        
          ContasAReceber novo=new ContasAReceber(referencia,cont,valor);
          return novo;
    }
    
    
  
    @Override
    public void listarContasAPagar(){
        System.out.println(" ");
          for(int i=0;i<this.contas.size();i++){
              if(contas.get(i) instanceof ContasAPagar){
                  System.out.println(contas.get(i));
              }
          }
        
    }
    
   
    
    @Override
    public void listarContasAReceber(){
        System.out.println(" ");
        for(int i=0;i<this.contas.size();i++){
              if(contas.get(i) instanceof ContasAReceber){
                  System.out.println(contas.get(i));
              }
          }
    }
   
    
    @Override
    public void listarContasBancarias(){
        System.out.println(" ");
        for(int i=0;i<this.banco.size();i++){
            System.out.println(this.banco.get(i));
        }
    }
    
    
    
    @Override
    public ContasBancarias criarContaBancaria(){
        
        int cont=1;
        for(int i=0;i<this.banco.size();i++){
            cont++;
        }
        System.out.println(" ");
        System.out.println(" numero da conta");
        int numero=ler.nextInt();
        System.out.println(" Agencia");
        ler.nextLine();
        String agencia=ler.nextLine();
          ContasBancarias novo=new ContasBancarias(cont,numero,agencia);
          return novo;
    }
    
    
    
    @Override
    public ContasBancarias buscarContasBancarias(){
        System.out.println(" ");
        System.out.println(" Numero da conta");
        int num=ler.nextInt();
        for(int i=0;i<this.banco.size();i++){
            if(banco.get(i).getNumero()==num){
                    return banco.get(i);
                }
            else{
                System.out.println(" ");
                System.out.println(" Conta nao encontrada");
                return null;
              }
            }
        return null;
        }
    
    
    @Override
    public int menuContasAPagar(){
                        System.out.println(" ");
                        System.out.println(" Contas a pagar");
                        System.out.println("1- Cadastrar conta");
                        System.out.println("2- listar contas");
                        System.out.println("0- sair");
                        op=ler.nextInt();
                        return op;
}
    
    
    
    @Override
    public int contasAReceber(){
                        System.out.println(" ");
                        System.out.println(" Contas a receber");
                        System.out.println("1- Cadastrar conta");
                        System.out.println("2- listar contas");
                        System.out.println("0- sair");
                        op=ler.nextInt();
                        return op;
    }
    
    
    @Override
    public int menuContasBancarias(){
                        System.out.println(" ");
                        System.out.println(" Contas bancarias");
                        System.out.println(" 1- cadastrar conta bancaria");
                        System.out.println(" 2- Listar contas Bancarias");
                        System.out.println(" 3- Sacar");
                        System.out.println(" 4- depositar");
                        System.out.println(" 0- sair");
                        op=ler.nextInt();
                        return op;
    }
   
    
    @Override
    public int menuPrincipal(){
        System.out.println(" ");
        System.out.println(" Menu Principal");
         System.out.println(" 1- contas a pagar");
         System.out.println(" 2- Contas a receber");
         System.out.println(" 3- contas bancarias");
         System.out.println(" 4- cartoes");
         System.out.println(" 5- ativos");
         System.out.println(" 6- pacivos");
         System.out.println(" 7- geradores de renda");
         System.out.println(" 0- sair");
          op=ler.nextInt();
          return op;
    }
    
    
    @Override
    public int menuCartoes(){
        System.out.println(" ");
        System.out.println(" 1- cadastrar nova conta cartao");
        System.out.println(" 2- listar contas cartao");
        System.out.println(" 0- sair");
          op=ler.nextInt();
       return op;
    }
    
    
    
    @Override
    public Cartoes cadastrarCartao(){
        System.out.println(" ");
        System.out.println(" numero do cartao");
        int numero=ler.nextInt();
        System.out.println(" Nome do cartao");
        ler.nextLine();
        String nome=ler.nextLine();
        System.out.println(" limite do cartao");
        long limite=ler.nextLong();
        
         Cartoes novo=new Cartoes(numero,limite,nome);
          return novo;
    }
    
    
    @Override
    public int menuAtivos(){
        System.out.println(" ");
        System.out.println(" 1- Cadastrar novo Ativo");
        System.out.println(" 2- Listar Ativos");
         System.out.println("0- sair");
          op=ler.nextInt();
          return op;
    }
    
    
    
    @Override
    public Ativos cadastrarAtivo(){
        
        int cont=1;
    
      if(bens.size()>0){
          
      for(int i=0;i<bens.size();i++){
          if(bens.get(i) instanceof Ativos){
              cont++;
          }
        }
      }
        System.out.println(" ");
        System.out.println(" nome:");
        ler.nextLine();
        String nome=ler.nextLine();
        
         Ativos novo=new Ativos(nome,cont);
         return novo;   
    }
    
   
    
    @Override
    public void listarAtivos(){
        for(int i=0;i<this.bens.size();i++){
            if(bens.get(i) instanceof Ativos){
                System.out.println(bens.get(i));
            }
        }
    }
    
    
    
    @Override
    public int menuPacivos(){
        System.out.println(" ");
        System.out.println(" 1- Cadastrar novo pacivo");
        System.out.println(" 2- Listar pacivos");
        System.out.println(" 0- sair");
         op=ler.nextInt();
        return op;
    }
   
    
    @Override
    public Pacivos cadastrarPacivo(){
       
          int cont=1;
    
      if(bens.size()>0){
          
      for(int i=0;i<bens.size();i++){
          if(bens.get(i) instanceof Pacivos){
              cont++;
          }
        }
      }
      System.out.println(" ");
        System.out.println(" nome:");
        ler.nextLine();
        String nome=ler.nextLine();
         
         Pacivos novo=new Pacivos(nome,cont);
         return novo;
    }
   
    
    @Override
    public void listarPacivos(){
        for(int i=0;i<this.bens.size();i++){
            if(bens.get(i) instanceof Pacivos){
                System.out.println(bens.get(i));
            }
        }
    }
    
   
    
    @Override
    public int menuGeradores(){
        System.out.println(" ");
        System.out.println(" 1- Cadastrar novo Gerador de renda");
        System.out.println(" 2- Listar todos os geradores de renda");
        System.out.println(" 0- Sair");
         op=ler.nextInt();
       return op;
    }
   
    
    @Override
    public GeradoresDeRenda CadastrarGeradores(){
        int i=gerador.size()+1;
        System.out.println(" ");
        System.out.println(" Referente a :");
        ler.nextLine();
        String nome=ler.nextLine();
        System.out.println(" Valor:");
        long valor=ler.nextLong();
         
         GeradoresDeRenda novo=new GeradoresDeRenda(nome,i,valor);
         return novo;
    }
   
    
    @Override
    public  void menu(){
         
           op=menuPrincipal();
            while (op!=0){
                
                switch(op){
                    case 1:
                        op=menuContasAPagar();
                        while(op!=0){
                            switch(op){
                                case 1:
                                        ContasAPagar novo=criarContaPagar();
                                        this.contas.add(novo);
                                    break;
                                case 2:
                                    listarContasAPagar();
                                    break;
                            }
                       op=menuContasAPagar();
                        }
                       
                        break;
                        
                    case 2:
                         op=contasAReceber();
                        while(op!=0){
                            switch(op){
                                case 1:
                                    ContasAReceber nova=criarContaReceber();
                                    this.contas.add(nova);
                                break;
                                 
                                case 2:
                                     listarContasAReceber();
                                break;
                            }
                       op=contasAReceber();
                        }
                       break;
                    case 3:
                        op=menuContasBancarias();
                         while(op!=0){
                             switch (op){
                                 case 1:
                                        ContasBancarias nov=criarContaBancaria();
                                        this.banco.add(nov);
                                     break;
                                 case 2:
                                     listarContasBancarias();
                                     break;
                                 case 3:
                                     
                                     ContasBancarias nova=buscarContasBancarias();
                                     if(nova!=null){
                                         System.out.println(" ");
                                      System.out.println(" Valor do saque");
                                     long valor=ler.nextLong();
                                     nova.sacar(valor);   
                                     }
                                     
                                      
                                     break;
                                 case 4:
                                     ContasBancarias novo=buscarContasBancarias();
                                     if(novo!=null){
                                         System.out.println(" ");
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         System.out.println(" valor do deposito:");
                                         long valor=ler.nextLong();
                                         novo.depositar(valor);
                                     }
                                    
                                     break;
                             }
                             op=menuContasBancarias();
                         }
                        
                        
                        break;
                        
                    case 4:
                        op=menuCartoes();
                         while(op!=0){
                             switch(op){
                                 case 1:
                                     Cartoes novoCartao=cadastrarCartao();
                                     this.cartao.add(novoCartao);
                                     break;
                                 case 2:
                                     for(int i=0;i<cartao.size();i++){
                                         System.out.println(cartao.get(i));
                                     }
                                     break;
                             }
                             op=menuCartoes();
                         }
                        break;
                        
                    case 5:
                        op=menuAtivos();
                         while(op!=0){
                             
                             switch(op){
                                 
                                 case 1:
                                     Ativos novoAtivo=cadastrarAtivo();
                                     this.bens.add(novoAtivo);
                                     break;
                                 case 2:
                                     listarAtivos();
                                     break;
                             }
                             op=menuAtivos();
                         }
                        break;
                        
                    case 6:
                        op=menuPacivos();
                         while(op!=0){
                             switch(op){
                                 case 1:
                                     Pacivos novoPacivo=cadastrarPacivo();
                                     this.bens.add(novoPacivo);
                                     break;
                                 case 2:
                                     listarPacivos();
                                     break;
                          
                             }
                             op=menuPacivos();
                         }
                        break;
                        
                    case 7:
                        op=menuGeradores();
                         while(op!=0){
                             switch(op){
                                 case 1:
                                     GeradoresDeRenda novoGerador= CadastrarGeradores();
                                     this.gerador.add(novoGerador);
                                     break;
                                 case 2:
                                     for(int i=0;i<this.gerador.size();i++){
                                         System.out.println(gerador.get(i));
                                     }
                                     break;
                             }
                             op=menuGeradores();
                         }
                        break;
                }
         
                    
                op=menuPrincipal();   
                }
            
            }


    }
     

